/*
 * version_info.h
 *
 * Representación de información sobre la versión de kernel de Linux
 *
 */

#ifndef VERSION_INFO_H
#define VERSION_INFO_H

#include "bstring/bstrlib.h"

/*
 * Tipo para información de versión de Kernel
 * El struct es público y no opaco _intencionalmente_. La abstracción es de
 * tupla sin otras operaciones, con lo cual se permite acceso (de lectura)
 * a los campos.
 */
typedef struct {
	int major;
	int minor;
	int subversion;
	bstring tag;
} VersionInfo;

VersionInfo version_info_new (const char *proc_dir);
/*
 * Arma un nuevo `VersionInfo', leyendo con los datos del sistema. `proc_dir'
 *  indica el punto de montaje de procfs, usualmente "/proc"
 * Returns: nuevo VersionInfo
 * Requires: proc_dir != NULL
 * Ensures: result.tag != NULL
 */

VersionInfo version_info_destroy (VersionInfo self);
/*
 * Destruye `self'. Usar con 'x = version_info_destroy (x)' para evitar
 *  que queden punteros dangling.
 * self: VersionInfo a destruir
 * Ensures: result.tag == NULL
 */

#endif /* VERSION_INFO_H */
